#include <iostream>
#include <unistd.h>
#include <signal.h>

// void Count(int n)
// {
//     // 计数
//     while(n)
//     {
//         printf("n:%2d\r", n);
//         fflush(stdout);
//         --n;
//         sleep(1);
//     }
//     printf("\n");
// }

// void handler(int signo)
// {
//     std::cout << "捕捉到了信号：" << signo << "，正在处理中..." << std::endl;
//     Count(10);
// }

// int main()
// {
//     struct sigaction act, oldact;
//     act.sa_handler = handler;
//     act.sa_flags = 0;

//     sigemptyset(&act.sa_mask);// 起初所有信号都不屏蔽
//     sigaddset(&act.sa_mask, 2);// 屏蔽3号信号
//     sigaction(SIGINT, &act, &oldact);

//     while(true) sleep(1);

//     return 0;
// }

void Count(int n)
{
    // 计数
    while(n)
    {
        printf("n:%2d\r", n);
        fflush(stdout);
        --n;
        sleep(1);
    }
    printf("\n");
}

volatile int quit = 0;

void handler(int signo)
{
    printf(" %d号信号被捕捉，正在递达----------\n", signo);
    printf("quit: %d", quit);
    quit = 1;
    printf(" -> %d\n", quit);
}

int main()
{
    signal(2, handler);
    while(!quit);
    printf("看到这，意味着正常退出!\n");

    return 0;
}